;	PDP-11 FLOATING POINT PACKAGE
;	ASCII STRING(OCTAL) TO INTEGER
;	INTEGER TO ASCII STRING(OCTAL)
;
;	MODULES INCLUDED:
;	1. ATOO
;	2. OTOA
;
;
;
;
R0	=	%0
R1	=	%1
R2	=	%2
R3	=	%3
R4	=	%4
R5	=	%5
SP	=	%6
PC	=	%7
OTOA:	MOV	@R1,R3		;PICK UP THE WORD
	MOV	#-2,R4		;MAKE THE FIRST ROUND SHORTER
	MOV	#6,R5		;DO FOR SIX DIGITS
M.IO1:	CLR	R2		;CLEAR THE CURRENT DIGIT
	ADD	#3,R4		;DO THE LOOP ONCE FIRST THEN THREE TIMES
	ROL	R3	;<-	;GET THE BIT
	ROL	R2	;  I	;PUT IT IN THE CURRENT DIGIT
	DEC	R4	;  I	;DECREMENT BIT COUNT
	BGT	.-6	;->	;BRANCH IF MORE TO DO
	ADD	#60,R2		;CONVERT TO ASCII
	MOVB	R2,(R0)+	;STORE A BYTE
	DEC	R5		;DECREMENT DIGIT COUNT
	BGT	M.IO1		;LOOP FOR MORE
	MOVB	#40,(R0)+	;FOLLOW WITH A SPACE
	RTS	PC		;RETURN TO THE USER
ATOO:	CLR	R2		;NUMBER TO BE
	CLR	R4		;SWITCHES
M.AONX:	MOVB	(R1)+,R3	;PICK UP A CHARACTER
	BIC	#177600,R3	;CLEAR PARITY BIT
	CMPB	#60,R3		;COMPARE WITH 0
	BGT	M.AO1		;BRANCH IF ILLEGAL
	CMPB	#67,R3		;COMPARE WITH 7
	BLT	M.AO1		;BRANCH IF ILLEGAL
	ASL	R2		;SHIFT  AND
	BCS	M.AOV		;CHECK FOR
	ASL	R2		;OVERFLOW
	BCS	M.AOV
	ASL	R2
	BCS	M.AOV
	BIS	#1,R4		;SET SIGNIFICANCE
	SUB	#60,R3		;CONVERT TO BINARY
	ADD	R3,R2		;INSERT INTO THE WORD
	BR	M.AONX		;GET ANOTHER CHARACTER
M.AO1:	CMPB	#40,R3		;COMPARE WITH A SPACE
	BNE	M.AO3		;BRANCH IF NOT SPACE
	BIT	#1,R4		;TEST SIGNIFICANCE
	BEQ	M.AONX		;BRANCH IF NONE
M.AO2:	MOVB	(R1)+,R3	;GET ANOTHER CHARACTER
	BIC	#177600,R3	;CLEAR PARITY BIT
	BR	M.AO1		;BRANCH FOR TEST
M.AO3:	CMPB	#054,R3		;COMPARE FOR ,
	BEQ	.+10	;->	;BRANCH IF EQUAL
	CMPB	#015,R3	;  I	;COMPARE WITH <CR>
	BNE	M.AOV	;  I	;BRANCH WITH ERROR
	MOV	R2,(R0)+;<-	;STORE THE WORD
	TST	R4		;TEST OVERFLOW SWITCH
	BMI	.+4	;->	;BRANCH TO SET V
	RTS	PC	;  I
	SEV		;<-	;SET OVERFLOW
	RTS	PC		;ERROR RETURN
M.AOV:	BIS	#100000,R4	;SET OVERFLOW
	BR	M.AO2		;PLURGE STRING
	.EOT
                                    